package menu_api

import (
	"github.com/gin-gonic/gin"
	"giv-vue-blog/global"
	"giv-vue-blog/models"
	"giv-vue-blog/models/res"
)

type Banner struct {
	ID   uint   `json:"id"`
	Path string `json:"path"`
}
type MenuResponse struct {
	models.MenuModel
	Banners []Banner `json:"banners"`
}

// MenuListView 查看菜单列表.
// @Summary 查看菜单列表
// @Description 查看菜单列表
// @Tags 菜单管理
// @Accept json
// @Produce json
// @Success 200 {array} MenuResponse "菜单列表"
// @Router /api/menu [get]
func (MenuApi) MenuListView(c *gin.Context) {
	//先查菜单表
	var menuList []models.MenuModel
	var menuIdList []uint
	global.DB.Order("sort desc").Find(&menuList).Select("id").Scan(&menuIdList)
	//查连接表  预加载BannerModel表，通过这个表查出图片id和路径
	var menuBanners []models.MenuBannerModel
	global.DB.Preload("BannerModel").Order("sort desc").Find(&menuBanners, "menu_id in ?", menuIdList)
	//var menus = []MenuResponse
	var menus = make([]MenuResponse, 0) //修复 当查出来不在的列表时，显示为null的问题，经过修复后，会显示为[]列表
	//model就是一个菜单
	for _, model := range menuList {
		var banners = make([]Banner, 0) //包含id和路径
		//循环连接表 及第三张表
		for _, banner := range menuBanners {
			//如果菜单表的id等于 关联表中的menu_id，就将banner表中的id和路径添加到banners中
			if model.ID != banner.MenuID {
				continue
			}
			banners = append(banners, Banner{
				ID:   banner.BannerID,         //图片id
				Path: banner.BannerModel.Path, //图片路径
			})
		}
		//将菜单表和封装好的id和路径追加到菜单表中
		menus = append(menus, MenuResponse{
			MenuModel: model,   //菜单表
			Banners:   banners, //包含了图片id和图片路径
		})
	}
	res.OkWithData(menus, c)
	return
}
